package com.shop.utils;

import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

/**
 * Freemarker Util
 * 
 * @author Kevin Lv
 * @date 2015年5月25日 下午2:35:19
 * @since 1.0.0
 */
public class FreemarkerUtils {

	/**
	 * 
	 * @Title: getTemplate
	 * @Description: 读取模板文件
	 * @param @param ftlName
	 * @param @return
	 * @return Template 返回类型
	 * @throws
	 */
	@SuppressWarnings("deprecation")
	public static Template getTemplate(String ftlName) {

		Configuration config = new Configuration();
		//读取模板文件目录，找到名称为ftlName的文件
		config.setClassForTemplateLoading(FreemarkerUtils.class, "/template");
		config.setDefaultEncoding("UTF-8");
		try {
			Template temp = config.getTemplate(ftlName);
			temp.setEncoding("UTF-8");
			return temp;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 
	 * @Title: printToScreen
	 * @Description: 输出到控制台
	 * @param @param ftlName
	 * @param @param root
	 * @return void 返回类型
	 * @throws
	 */
	public static void printToScreen(String ftlName, Map<String, Object> root) {

		Template temp = getTemplate(ftlName);
		try {
			//将模板文件输出到相应的流中，这里是输出到控制台
			temp.process(root, new PrintWriter(System.out));
		} catch (TemplateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 
	 * @Title: outToFile
	 * @Description: 输出到文件
	 * @param @param ftlName
	 * @param @param root
	 * @param @param outputFile
	 * @return void 返回类型
	 * @throws
	 */
	public static String outToFile(String ftlName, Map<String, Object> root, String outputFile) {

		Template temp = getTemplate(ftlName);
		FileOutputStream fos = null;
		OutputStreamWriter osw = null;
		BufferedWriter bw = null;
		try {
			fos = new FileOutputStream(outputFile);
			osw = new OutputStreamWriter(fos, "UTF-8");
			bw = new BufferedWriter(osw, 1024);
			temp.process(root, bw);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (TemplateException e) {
			e.printStackTrace();
		} finally {
			try {
				if (null != bw) {
					bw.flush();
					bw.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return outputFile;
	}

}
